05 · Supervisor 多智能体:一个 Agent 装不下的活
零、开始之前
前置:01 ReAct(尤其 4.6 讲 messages 增长的部分)、03 Plan。
产出:中心化与去中心化两种多 Agent 结构,以及不该用它的判断力。
先说结论:多智能体的两个理由是上下文隔离和并行,都是工程约束,与智能无关。说不出隔离了什么、并行了什么,就别拆。
一、先看一个真实问题
给一个 ReAct Agent 派活:
「调研一下我们这三个候选的向量数据库,写一份对比报告。」
它会怎么做?
第 1 步 搜索 A 数据库的文档 → 返回 8000 token
第 2 步 打开官方性能测试页 → 返回 12000 token
第 3 步 搜索 A 的已知问题 → 返回 6000 token
第 4 步 搜索 B 数据库的文档 → 返回 9000 token
...
第 12 步 上下文超限,报错 ❌
问题很直接:调研过程产生的原始材料,比最终报告大两个数量级。
而这些原始材料,在写报告的时候一点都不需要。你需要的只是「A 的结论、B 的结论、C 的结论」这三段话。
再看第二个问题:这三个数据库的调研互不依赖,完全可以同时进行。但 ReAct 是单线程的,只能一个接一个查。
二、朴素的办法为什么不够
想法一:换个上下文窗口更大的模型。
能撑久一点,但治标不治本。而且长上下文有两个隐性代价:
- 贵:每一轮都要重发全部历史,token 消耗随轮数平方增长
- 笨:上下文越长,中段信息越容易被忽略(03 讲过的 lost in the middle)
想法二:每查完一次就做个摘要。
方向对了,这其实就是多智能体做的事的一半。但如果你在同一个 Agent 里做摘要,原始材料仍然在历史里 —— 你只是又加了一段摘要,历史反而更长了。
要真正扔掉原始材料,你得让「查资料」这件事发生在另一个上下文里。
这就是多智能体的第一个真实理由:
让子 Agent 在自己独立的上下文里干脏活,只把结论带回来。
第二个理由是并行:三个数据库同时调研,墙上时间除以 3。